﻿using Microsoft.Windows.Controls.Primitives;
using SIIE_ERP.Codigo;
using SIIE_ERP.View;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace Elysium.Demo.Inventarios.Catalogos
{
    /// <summary>
    /// Interaction logic for Listas_Precios_Edita.xaml
    /// </summary>
    public partial class Listas_Precios_Edita : UserControl, IPropiedadesNavegacion
    {
        private UsuarioActivo _sesion;
        private Int32 Id;
        private Int32 id_Articulo;
        private string PrecioLista;
        private string Id_Moneda;
        List<CMoneda> monedas;

        ////////////////////////////////////////////////////////////////////////////
        //  PROPIEDADES DE NAVEGACION
        public string Texto { get { return _texto; } }
        public TabControl TabControlPadre { get { return _tabControlPadre; } }
        public TabItem TabItemPadre { get { return _tabItemPadre; } }

        private string _texto;
        string mensage,lista;
        private TabControl _tabControlPadre;
        private TabItem _tabItemPadre;

        public void setParametros(string Texto, ref TabControl tabControl, ref TabItem tabItem)
        {
            this._texto = Texto; this._tabControlPadre = tabControl; this._tabItemPadre = tabItem;
        }

        private void ButtonRegresar_Click(object sender, RoutedEventArgs e)
        {
            _tabControlPadre.Items.Remove(_tabItemPadre);
        }
        // FIN DE PROPIEDADES DE NAVEGACION
        ///////////////////////////////////////////////////////////////////////////
        public Listas_Precios_Edita(UsuarioActivo usuario, string Id)
        {
            InitializeComponent();
            this._sesion = usuario;
            this.Id = Int32.Parse(Id);
            ComboBoxUI.ComboArticulos_AutoComplete_ListaPrecios(ref  ComboArticulo, _sesion, "");

            cargaDatos();

        }

        private void cargaDatos()
        {
            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Listas_Precios(_sesion.RFC, _sesion.UserName);
            var listaPrecios = db.Get_Lista_Precios_By_Id(this.Id).Rows[0];
            lista=listaPrecios["Nombre"].ToString();
            TextBox_Nombre.Text = lista;
            TextBox_Descripcion.Text = listaPrecios["Descripcion"].ToString();
            ComboBoxUI.ComboMonedas(ComboMoneda, _sesion);

            //  var dbArticulos = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Articulo(_sesion.RFC, _sesion.UserName);
            var articulos = db.Get_Lista_Precios_Articulo(this.Id).Rows;
            ArticulosDataGrid.Items.Clear();
            foreach (DataRow articulo in articulos)
            {
                ArticulosDataGrid.Items.Add(new CArticulo(
                        articulo["Id_Articulo"].ToString(),

                        articulo["Nombre"].ToString(),
                        articulo["Tipo_Moneda"].ToString(),
                        articulo["Precio_Lista"].ToString()
                    ));
            }


        }

        class CArticulo
        {
            public string Id { get; set; }

            public string Nombre { get; set; }

            public string Tipo_Moneda { get; set; }
            public string Precio_Lista { get; set; }

            public CArticulo(string Id,

                             string Nombre,
                             string Tipo_Moneda,
                             string Precio_Lista)
            {
                this.Id = Id;

                this.Nombre = Nombre;
                if (Tipo_Moneda == "1")
                {
                    this.Tipo_Moneda = "PES";
                }
                if (Tipo_Moneda == "2")
                {
                    this.Tipo_Moneda = "USD";
                }
                if (Tipo_Moneda == "3")
                {
                    this.Tipo_Moneda = "EUR";
                }
                this.Precio_Lista = Precio_Lista;

            }
        }




        private void ArticulosDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {

                DataGrid dataGrid = sender as DataGrid;
                if (e.AddedItems != null && e.AddedItems.Count > 0)
                {
                    // find row for the first selected item
                    DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromItem(e.AddedItems[0]);
                    if (row != null)
                    {
                        id_Articulo = Convert.ToInt32(((Elysium.Demo.Inventarios.Catalogos.Listas_Precios_Edita.CArticulo)(row.Item)).Id);


                    }
                }


            }
            catch (Exception)
            {

                return;
            }

        }


        private void Button_Cancelar_Click(object sender, RoutedEventArgs e)
        {
            _tabControlPadre.Items.Remove(_tabItemPadre);
        }

        private void Button_Guardar_Click(object sender, RoutedEventArgs e)
        {
            if (!Validaciones()) return;
            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Listas_Precios(_sesion.RFC, _sesion.UserName);
            if (db.Get_Lista_Precios_Articulo_By_Id(this.Id, Convert.ToInt32(ComboArticulo.SelectedValue)).Rows.Count > 0)
            {
                MessageBox.Show("Articulo ya agregado.");
                return;
            }

            if (db.Insert_Lista_Precios_Articulo(Convert.ToInt32(ComboArticulo.SelectedValue), this.Id, Convert.ToDouble(TextBox_PrecioLista.Text), ComboMoneda.SelectedIndex + 1).Id == 1)
            {
                MessageBox.Show("Articulo agregado correctamente.");
            }
            else
            {
                MessageBox.Show("Error al agregar el Articulo.");
            }
            cargaDatos();
        }

       

        private bool Validaciones()
        {
            if (ComboArticulo.SelectedValue == null)
            {
                MessageBox.Show("Debe seleccionar un articulo."); return false;
            }
            try { Double.Parse(TextBox_PrecioLista.Text); }
            catch (Exception)
            {
                MessageBox.Show("El campo Precio de Lista debe ser númerico."); return false;
            }

            if (Double.Parse(TextBox_PrecioLista.Text) < 0)
            {
                MessageBox.Show("El campo Precio de Lista debe ser mayor a 0."); return false;
            }

            return true;
        }

        private void ComboArticulo_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {
                var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Articulo(_sesion.RFC, _sesion.UserName);
                var art = db.Get_Articulo_Por_Id(Convert.ToInt32(ComboArticulo.SelectedValue)).Rows[0];

                Id_Moneda = art["Id_Moneda"].ToString();
                ComboMoneda.SelectedValue = Convert.ToInt32(Id_Moneda);
                PrecioLista = art["Precio_Lista"].ToString();
                TextBox_PrecioLista.Text = PrecioLista;
            }

            catch (Exception)
            {

            }




        }

        private void AbrirLinkArticulo_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                _tabControlPadre.Items.Remove(_tabItemPadre);

                SIIE_ERP.View.NavegacionUI.AbrirPestanaEditar((e.OriginalSource as Hyperlink).NavigateUri.OriginalString + "|" + this.Id,
                                                       typeof(Inventarios.Catalogos.Listas_Precios_Detalle),
                                                       ref  _tabControlPadre,
                                                       _sesion);
            }
            catch (Exception)
            {
                cargaDatos();
            }

        }



        private void TabItem_GotFocus(object sender, RoutedEventArgs e)
        {
            try
            {
                //SIIE_ERP.View.NavegacionUI.AbrirPestanaEditar((e.OriginalSource as Hyperlink).NavigateUri.OriginalString,
                //                                         typeof(Catalogos.Articulos_Edita),
                //                                         ref ArticulosTabControl,
                //                                         _sesion);
            }
            catch (Exception)
            {
                //   CargarDatos();
            }

        }

        private void btnDelete_Click(object sender, RoutedEventArgs e)
        {
            var db = new SIIE_ERP.BaseDatos.Inventarios.Catalogos.dbo_Cat_Listas_Precios(_sesion.RFC, _sesion.UserName);
            if (MessageBox.Show("¿Esta seguro de eliminar este articulo?", "Eliminar", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
            {
                if (db.Delete_Lista_Precios_Articulo_Por_Id(this.Id, this.id_Articulo).Id == 1)
                {
                    cargaDatos();
                }
                else
                {
                    MessageBox.Show("El articulo tiene relaciones y por eso no es posible borrarla.");
                }
            }
        }

        private void Button_GuardarPrecio_Click(object sender, RoutedEventArgs e)
        {
            var codigo = new SIIE_ERP.Codigo.Inventarios.Catalogos.Listas_Precios();
            mensage = codigo.validaDatosUpdate(_sesion.RFC, _sesion.UserName, TextBox_Nombre.Text, lista);
            if (String.IsNullOrEmpty(mensage))
            {
                MessageBox.Show(codigo.Update_Lista_Precios(_sesion.RFC, _sesion.UserName, this.Id, TextBox_Nombre.Text, TextBox_Descripcion.Text));

            }
            else
            {
                MessageBox.Show(mensage);

            }

        }

        private void Button_CancelarPrecio_Click(object sender, RoutedEventArgs e)
        {
            _tabControlPadre.Items.Remove(_tabItemPadre);
        }

        private void ButtonEliminar_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                var codigo = new SIIE_ERP.Codigo.Inventarios.Catalogos.Listas_Precios();
                MessageBox.Show(codigo.Delete_Lista_Precio_By_Id(_sesion.RFC, _sesion.UserName, this.Id)); // .validaDatosAlta(_sesion.RFC, _sesion.UserName, TextBox_Nombre.Text);
                _tabControlPadre.Items.Remove(_tabItemPadre);
            }
            catch (Exception)
            {


            }
        }

        private void ComboMoneda_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {
                var FMonedaToPesos = SIIE_ERP.Codigo.Bancos.Catalogos.TipoDeCambioCode.FromMonedaToPesos(Convert.ToInt32(Id_Moneda), // Id Moneda del Pago
                                                                                    Double.Parse(PrecioLista), _sesion);
                var Monto = SIIE_ERP.Codigo.Bancos.Catalogos.TipoDeCambioCode.FromPesosToMoneda(Int32.Parse(ComboMoneda.SelectedValue.ToString()), // Id Moneda del Documento
                            FMonedaToPesos, _sesion);                                    // Este monto esta en la moneda del documento

                TextBox_PrecioLista.Text = (Math.Round(Convert.ToDouble(Monto), 2)).ToString();

            }
            catch (Exception) { }
        }
        public class CMoneda
        {
            public string Id { get; set; }
            public string Cambio { get; set; }

            public CMoneda(string Id, string Cambio)
            {
                this.Id = Id;
                this.Cambio = Cambio;
            }
        }


    }
}
